import numpy as np

# 创建一个数组
arr = np.array([[1, 2, 3, 4, 5],
               [2, 2, 3, 4, 5],
               [3, 2, 3, 4, 5],
               [4, 2, 3, 4, 5],
               [5, 2, 3, 4, 5],
               [6, 2, 3, 4, 5],
               [7, 2, 3, 4, 5],
               [8, 2, 3, 4, 5],
               [9, 2, 3, 4, 5]])

# 创建数组
arr_zero = np.zeros((2, 3))           # 2x3 的0矩阵
print("zeros:\n", arr_zero)
arr_one = np.ones((2, 3))             # 2x3 的单位阵
print("ones:\n", arr_one)
arr_range = np.arange(0, 10, 2)       # 从 0 到 10，步长为 2
print("arange:", arr_range)
arr_linspace = np.linspace(0, 10, 5)  # 从 0 到 10 之间均匀分布的 5 个数
print("linspace:", arr_linspace)
print("================创建数组================")
# 增
arr_append = np.append(arr, [6, 7])       # 向末尾添加元素
print("append:\n", arr_append)
arr_insert = np.insert(arr, 1, 10)       # 在索引 1 处插入值 10
print("insert:\n", arr_insert)
print("================增================")
# 删
arr_delete = np.delete(arr, 2)           # 删除索引为 2 的元素
print("delete:\n", arr_delete)
print("================删================")
# 改
arr[0] = 10                               # 将索引为 0 的元素修改为 10
print("modified arr:\n", arr)
print("================改================")
# 查
print('原始数组:\n', arr)
print("access index 0:\n", arr[0])         # 访问索引为 0 的元素
print("slice [0:10:2]:\n", arr[0:10:2])    # 索引为 0 到 9（步长 2）的子数组
print("elements > 3:\n", arr[arr > 3])     # 查找大于 3 的元素
print("last element:\n", arr[-1])          # 访问倒数第一个元素

# np.where
arr_condition = np.where(arr > 2, arr, 0)  # 满足条件的保留，其余替换为 0
print("where condition:\n", arr_condition)

# np.argmax, np.argmin
print("argmax (index of max value):\n", np.argmax(arr)) # 返回最大值索引
print("argmin (index of min value):\n", np.argmin(arr)) # 返回最小值索引

# np.take
arr_take = np.take(arr, [0, 2, 4])        # 选择特定索引位置的元素
print("take:\n", arr_take)

# 获取特定列
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  # 二维数组
print("second column:\n", arr_2d[:, 1])  # 获取第二列
print("================查================")
